package JianZhiOffer;

import JianZhiOffer.entity.ListNode;

/**
 * 输入一个链表，输出该链表中倒数第k个节点。为了符合大多数人的习惯，
 * 本题从1开始计数，即链表的尾节点是倒数第1个节点。
 * 例如，一个链表有6个节点，从头节点开始，它们的值依次是1、2、3、4、5、6。
 * 这个链表的倒数第3个节点是值为4的节点。
 * <p>
 * 示例：
 * 给定一个链表: 1->2->3->4->5, 和 k = 2.
 * 返回链表 4->5.
 */
public class Solution22 {

    public ListNode getKthFromEnd(ListNode head, int k) {
        // 定义前后指针，都从头结点开始
        ListNode prev = head, suff = head;
        int i = 0;
        // 前指针先走k步
        while (i < k) {
            prev = prev.next;
            i++;
        }

        // 前后指针一步一步往前走，当前指针走到末尾的时候跳出循环
        while (prev != null) {
            prev = prev.next;
            suff = suff.next;
        }

        // 直接返回后指针
        return suff;
    }
}
